context
这是一个给培训的同学写的Demo,概括起来的几个特点是:
- 无法和服务器沟通,只能在iOS端这里更改网页
- 需要隐藏两个html组件
这是没有修改的网页的地址 ,可以看到,顶部和底部有网页原来的两个条,需要隐藏,来实现如下的效果:
执行JS的坑
首先, 在电脑端利用浏览器进行调试 , 得到可正确执行的 JS代码,如下:
1 | function getElementsClass(classnames){ |
执行JS
重点来了 ,由于在公司开发的 ,都有服务器端作为配合,所以用UIWebView执行JS来修改html代码这种需求 ,对工作中的开发者并不常见. 所以在使用的时候, 遇到了一些问题:
进入头文件:
找到了可以直接拼接 JS 的方法:
1 | - (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script; |
然后就是拼接了,看到这么多行, 肯定不能用手写了 .于是 ,我很得意的利用正则表达式工具,给每行拼接了成了 [string appendString:@"blablabla..."];
这样的形式
发现不执行,重点是修改JS代码也变得十分困难了.后来才愚蠢的想到可以将JS放到文件中… ,使用如下代码加载:
1 | NSString *filePath = [[NSBundle mainBundle] pathForResource:@"disappear" ofType:@"js"]; |
再一个关键的问题, 就是何时让 UIWebView执行这段代码 ,首先想到的,是代理方法 .
一共有四个代理方法 ,根据名字可以非常容易知道其调用的时机 .
1 | /** |
一开始想到的是 , 加载完毕 , 然后执行 JS .于是在加载完毕代理方法中拼接JS ,结果不执行.
后来尝试了开始加载的两个方法.
经过多方尝试. 写出如下代码:
1 | self.mainWebView.delegate = self; |
成功实现功能